package api

import (
	"temp/handler"

	"github.com/gin-gonic/gin"
	"github.com/redis/go-redis/v9"
	"gorm.io/gorm"
)

type UserApi struct {
	*handler.UserHandler
}

func NewUserApi(db *gorm.DB, cache *redis.Client) *UserApi {
	return &UserApi{
		UserHandler: handler.NewUserHandler(db, cache),
	}
}

// Login
// @Summary      用户登录
// @Description  用户登录
// @Tags         auth
// @Accept       json
// @Produce      json
// @Param        login  body      handler.LoginRequest  true  "登录信息"
// @Success      200    {object}  constant.Response
// @Failure      400    {object}  constant.Response
// @Failure      401    {object}  constant.Response
// @Failure      500    {object}  constant.Response
// @Router       /login [post]
func (api *UserApi) Login(c *gin.Context) {
	api.UserHandler.Login(c)
}

// Register
// @Summary      用户注册
// @Description  用户注册
// @Tags         auth
// @Accept       json
// @Produce      json
// @Param        register  body      RegisterRequest  true  "注册信息"
// @Success      200    {object}  handler.SuccessResponse
// @Failure      400    {object}  handler.ErrorResponse
// @Failure      500    {object}  handler.ErrorResponse
// @Router       /register [post]
func (api *UserApi) Register(c *gin.Context) {
	api.UserHandler.Register(c)
}

// CurrentUser
// @Summary      获取当前登录用户信息
// @Description  获取当前登录用户信息
// @Tags         user
// @Accept       json
// @Produce      json
// @Security     ApiKeyAuth
// @Success      200  {object}  handler.UserResponse
// @Failure      401  {object}  errors.ErrorResponse
// @Router       /user/current [get]
func (api *UserApi) CurrentUser(c *gin.Context) {
	api.UserHandler.CurrentUser(c)
}

// Logout
// @Summary      用户登出
// @Description  用户登出
// @Tags         auth
// @Accept       json
// @Produce      json
// @Security     ApiKeyAuth
// @Success      200  {object}  handler.SuccessResponse
// @Router       /logout [post]
func (api *UserApi) Logout(c *gin.Context) {
	api.UserHandler.Logout(c)
}
